﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;

namespace DocTes.Jerarquias
{
	/// <summary>
	/// Clase implementa DataSourceView para usar en el DataSource especifico de treeview
	/// creado en la aplicación
	/// </summary>
	public class JerarquiaCarpetaDataSourceView : HierarchicalDataSourceView
	{
		private IEntidadLinqJerarquiaCarpeta _jerarquiaCarpeta;
		private IFabricaHierarchyData _fabricaHierarchyData;
		private IFabricaJerarquiaHierarchicalEnumerable _fabricaJerarquiaEnumerable;
		
		/// <summary>
		/// Constructor por defecto
		/// </summary>
		/// <param name="entidadLinqCarpeta">entidad Linq que representa al nodo (carpeta)</param>
		/// <param name="fabricaJerarquiaEnumerable">fabrica para crear IHierarchicalEnumerables</param>
		/// <param name="fabricaJierarchyData">fabrica para crear IHierarchyData Objects</param>
		public JerarquiaCarpetaDataSourceView(IEntidadLinqJerarquiaCarpeta entidadLinqCarpeta,
															IFabricaJerarquiaHierarchicalEnumerable fabricaJerarquiaEnumerable,
															IFabricaHierarchyData fabricaJierarchyData)
		{
			_jerarquiaCarpeta = entidadLinqCarpeta;
			_fabricaHierarchyData = fabricaJierarchyData;
			_fabricaJerarquiaEnumerable = fabricaJerarquiaEnumerable;
		}

		/// <summary>
		/// Override del método select para seleccionar los hijos directos del nodo interno
		/// </summary>
		/// <returns></returns>
		public override IHierarchicalEnumerable Select()
		{
			IJerarquiaCarpetaHierarchicalEnumerable jerarquiaEnumerable = _fabricaJerarquiaEnumerable.Construir();
			List<IEntidadLinqAsociacionJerarquiaPadreHijo> listado = _jerarquiaCarpeta.AsociacionesJerarquiasHijos.ToList();
			foreach (IEntidadLinqAsociacionJerarquiaPadreHijo asociacion in listado)
			{
				jerarquiaEnumerable.Add(_fabricaHierarchyData.Construir(asociacion.JerarquiaHijo));
			}
			return jerarquiaEnumerable;
		}
	}
}
